const app = getApp();
const { getApiUrl } = require('../../config/config.js');

Page({
  data: {
    currentVersion: '',
    updateInfo: null,
    downloading: false,
    downloadProgress: 0,
    formattedReleaseTime: '',
    downloadFailed: false,
    installReady: false,
    downloadedFilePath: '',
    isAndroid: false,
    isIOS: false,
    hasUpdate: false,
    loading: false,
    systemInfo: null,
    showCurrentVersion: true // 默认显示当前版本信息
  },
  
  onLoad: function() {
    // 初始化页面数据
    this.initPageData();
    
    // 检测平台
    this.checkPlatform();
    
    // 获取当前版本信息
    this.getCurrentVersionInfo();
    
    // 自动检测更新
    this.fetchUpdateInfo();
  },
  
  // 初始化页面数据
  initPageData: function() {
    // 清除之前的更新信息
    app.globalData.updateInfo = null;
    
    // 获取系统信息
    const systemInfo = wx.getSystemInfoSync();
    this.setData({ 
      systemInfo,
      loading: false 
    });
  },
  
  // 获取当前版本信息
  getCurrentVersionInfo: function() {
    // 从多个来源获取当前版本号
    let currentVersion = '1.0.0'; // 默认版本
    
    // 优先从 app.globalData 获取
    if (app.globalData.currentVersion) {
      currentVersion = app.globalData.currentVersion;
    }
    // 也可以从其他配置获取，比如从远程配置
    
    this.setData({ currentVersion });
  },
  
  // 检测当前运行平台
  checkPlatform: function() {
    const that = this;
    
    // 在uni-app环境中
    if (typeof plus !== 'undefined') {
      const platform = plus.os.name.toLowerCase();
      this.setData({
        isAndroid: platform === 'android',
        isIOS: platform === 'ios'
      });
    } else {
      // 在小程序环境中，尝试通过系统信息判断
      wx.getSystemInfo({
        success: function(res) {
          that.setData({
            isAndroid: res.platform === 'android',
            isIOS: res.platform === 'ios'
          });
        }
      });
    }
  },
  
  // 从服务器获取更新信息
  fetchUpdateInfo: function() {
    const that = this;
    this.setData({ loading: true });
    
    // 获取当前平台信息
    const currentPlatform = this.getCurrentPlatform(this.data.systemInfo);
    
    wx.request({
      url: getApiUrl('/admin/config/latest'),
      method: 'GET',
      data: {
        platform: currentPlatform
      },
      header: {
        'token': wx.getStorageSync('token')
      },
      success: function(res) {
        that.setData({ loading: false });
        
        if (res.statusCode === 200 && (res.data.code === 200 || res.data.code === 0)) {
          const updateInfo = res.data.data;
          
          if (updateInfo && updateInfo.version) {
            // 比较版本号，判断是否需要更新
            const needUpdate = that.compareVersion(updateInfo.version, that.data.currentVersion) > 0;
            
            that.setData({
              updateInfo: updateInfo,
              hasUpdate: needUpdate,
              showCurrentVersion: false // 获取到远程版本后，显示版本对比
            });
            
            if (needUpdate) {
              app.globalData.updateInfo = updateInfo;
              that.processUpdateInfo(updateInfo);
            }
          } else {
            // 没有版本信息，保持显示当前版本
            that.setData({ showCurrentVersion: true });
          }
        } else {
          console.error('获取版本信息失败:', res.data);
          // 接口调用失败，保持显示当前版本
          that.setData({ showCurrentVersion: true });
        }
      },
      fail: function(error) {
        that.setData({ loading: false, showCurrentVersion: true });
        console.error('网络错误:', error);
      }
    });
  },
  
  // 手动检查更新
  checkForUpdate: function() {
    this.fetchUpdateInfo();
  },
  
  // 获取当前平台
  getCurrentPlatform: function(systemInfo) {
    if (systemInfo.platform === 'android') {
      return 'android';
    } else if (systemInfo.platform === 'ios') {
      return 'ios';
    } else {
      return 'miniprogram'; // 小程序平台
    }
  },
  
  // 版本号比较函数
  compareVersion: function(version1, version2) {
    const v1 = version1.split('.').map(Number);
    const v2 = version2.split('.').map(Number);
    
    const maxLength = Math.max(v1.length, v2.length);
    
    for (let i = 0; i < maxLength; i++) {
      const num1 = v1[i] || 0;
      const num2 = v2[i] || 0;
      
      if (num1 > num2) return 1;
      if (num1 < num2) return -1;
    }
    
    return 0;
  },
  
  // 处理更新信息
  processUpdateInfo: function(updateInfo) {
    // 格式化发布时间
    let formattedTime = '';
    if (updateInfo && updateInfo.releaseTime) {
      const releaseDate = new Date(updateInfo.releaseTime);
      formattedTime = `${releaseDate.getFullYear()}-${String(releaseDate.getMonth() + 1).padStart(2, '0')}-${String(releaseDate.getDate()).padStart(2, '0')}`;
    }
    
    this.setData({
      updateInfo: updateInfo,
      formattedReleaseTime: formattedTime
    });
  },
  
  // 开始下载
  startDownload: function() {
    const that = this;
    const updateInfo = this.data.updateInfo;
    
    if (!updateInfo || !updateInfo.downloadUrl) {
      wx.showToast({
        title: '下载地址无效',
        icon: 'none'
      });
      return;
    }
    
    this.setData({ 
      downloading: true,
      downloadFailed: false,
      installReady: false
    });
    
    // 在真机环境中，这里需要调用原生的下载和安装方法
    if (typeof plus !== 'undefined') {
      // uni-app环境
      if (this.data.isAndroid) {
        this.downloadWithUniApp(updateInfo.downloadUrl);
      } else if (this.data.isIOS) {
        // iOS通常跳转到App Store
        this.handleIOSUpdate(updateInfo);
      }
    } else {
      // 小程序环境或其他环境，模拟下载进度
      this.simulateDownload();
    }
  },
  
  // 处理iOS更新
  handleIOSUpdate: function(updateInfo) {
    const that = this;
    
    // iOS通常是跳转到App Store
    if (updateInfo.downloadUrl && updateInfo.downloadUrl.includes('itunes.apple.com')) {
      // 直接打开App Store链接
      plus.runtime.openURL(updateInfo.downloadUrl, function(res) {
        console.log('打开App Store成功');
      }, function(err) {
        console.error('打开App Store失败:', err);
        wx.showToast({
          title: '打开App Store失败，请手动更新',
          icon: 'none'
        });
      });
    } else {
      // 如果不是App Store链接，提示用户手动更新
      wx.showModal({
        title: '更新提示',
        content: '请前往App Store搜索并更新应用',
        showCancel: false,
        success: function() {
          that.setData({ downloading: false });
        }
      });
    }
  },
  
  // 使用uni-app的API下载
  downloadWithUniApp: function(downloadUrl) {
    const that = this;
    
    // 创建下载任务
    const dtask = plus.downloader.createDownload(downloadUrl, {
      filename: "_doc/update/app.apk"
    }, function(d, status) {
      if (status == 200) {
        that.setData({ 
          downloading: false,
          downloadProgress: 100,
          installReady: true,
          downloadedFilePath: d.filename
        });
        
        // 自动安装应用
        that.installApp(d.filename);
      } else {
        that.setData({ 
          downloading: false,
          downloadFailed: true
        });
        wx.showToast({
          title: '下载失败，请重试',
          icon: 'none'
        });
      }
    });
    
    dtask.start();
    
    // 监听下载进度
    dtask.addEventListener("statechanged", function(task, status) {
      if (task.state == 3) { // 下载中
        const percent = parseInt(task.downloadedSize / task.totalSize * 100);
        that.setData({ downloadProgress: percent });
      }
    });
  },
  
  // 安装应用
  installApp: function(filePath) {
    const that = this;
    
    // 安装应用
    plus.runtime.install(filePath, {}, function() {
      console.log('安装成功');
      wx.showToast({
        title: '安装成功',
        icon: 'success'
      });
    }, function(e) {
      console.error('安装失败：' + e.message);
      that.setData({ installReady: true });
      wx.showModal({
        title: '安装失败',
        content: '请点击"手动安装"按钮重试，或检查是否允许安装未知来源应用',
        showCancel: false
      });
    });
  },
  
  // 手动安装
  manualInstall: function() {
    if (this.data.downloadedFilePath) {
      this.installApp(this.data.downloadedFilePath);
    } else {
      wx.showToast({
        title: '安装包不存在，请重新下载',
        icon: 'none'
      });
    }
  },
  
  // 重试下载
  retryDownload: function() {
    this.startDownload();
  },
  
  // 模拟下载进度（小程序环境）
  simulateDownload: function() {
    const that = this;
    let progress = 0;
    const timer = setInterval(() => {
      progress += 5;
      if (progress > 100) {
        clearInterval(timer);
        
        // 下载完成后
        setTimeout(() => {
          that.setData({ 
            downloading: false,
            downloadProgress: 100
          });
          
          wx.showModal({
            title: '下载完成',
            content: '新版本已下载完成，请点击确定前往安装',
            success: function(res) {
              if (res.confirm) {
                // 在小程序环境中，可以复制下载链接让用户在浏览器中打开
                wx.setClipboardData({
                  data: that.data.updateInfo.downloadUrl,
                  success: function() {
                    wx.showToast({
                      title: '下载链接已复制，请在浏览器中打开',
                      icon: 'none',
                      duration: 2000
                    });
                  }
                });
              }
            }
          });
        }, 500);
      } else {
        that.setData({ downloadProgress: progress });
      }
    }, 200);
  },
  
  // 复制下载链接
  copyDownloadUrl: function() {
    const that = this;
    if (this.data.updateInfo && this.data.updateInfo.downloadUrl) {
      wx.setClipboardData({
        data: this.data.updateInfo.downloadUrl,
        success: function() {
          wx.showToast({
            title: '下载链接已复制',
            icon: 'success'
          });
        }
      });
    }
  },
  
  // 返回上一页
  goBack: function() {
    wx.navigateBack();
  }
});